1
ข้อผิดพลาดจากการจัดการหน่วยความจำด้วยตนเอง
AI013Lesson 5
00:00

การจัดการหน่วยความจำด้วยตนเองผ่าน new และ delete สร้างความสัมพันธ์ที่เปราะบาง "ข้อตกลงความรับผิดชอบ". นักพัฒนาต้องคาดการณ์เส้นทางการประมวลผลทุกจุดอย่างแม่นยำ รวมถึงการคืนค่าแบบเร็วและข้อผิดพลาด (exceptions) เพื่อให้มั่นใจว่าทรัพยากรจะถูกปล่อยคืน แนวทางนี้มีแนวโน้มเกิดความล้มเหลวในระดับระบบ

ความล้มเหลวในระดับระบบ

  • ไซโคลของความรั่วไหล: ในตรรกะที่ซับซ้อน (เช่น if-else, switches) การไม่จับคู่การใช้งานแต่ละครั้งของ new กับ delete ทำให้ประสิทธิภาพของระบบลดลงเรื่อยๆ
  • ข้อผิดพลาดจากชี้ไปยังหน่วยความจำที่ไม่ถูกต้อง: ข้อผิดพลาดเช่น Dangling Pointers (การเข้าถึงหน่วยความจำหลังการลบ) หรือ Double Frees ก่อให้เกิดพฤติกรรมที่ไม่แน่นอนและช่องโหว่ด้านความปลอดภัย
  • ความปลอดภัยเมื่อเกิดข้อผิดพลาด (Exception): หากเกิดข้อผิดพลาดระหว่างการจัดสรรและการคืนหน่วยความจำ คำสั่ง delete จะถูกละเลยทั้งหมด
new char[]Xการคืนค่าเร็ว (การรั่วไหล)Xข้อผิดพลาด (การรั่วไหล)ตัวป้องกัน ()• std::unique_ptr• std::shared_ptr• std::weak_ptr

การเปลี่ยนแปลงของ การพัฒนา

C++11/14 ได้ปรับปรุงหัวข้อ <memory> เพื่อเลิกใช้ "ชี้ตรง" (naked pointers) และเปลี่ยนมาใช้โมเดลการเป็นเจ้าของอัตโนมัติที่บังคับความปลอดภัยไว้ที่ระดับคอมไพล์เลอร์

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>